from collections import OrderedDict

print(" ******** 1.字典创建 *********")
# 直接通过大括号进行创建
dict_1 = {}  # 定义一个空字典
dict_2 = {'a': 1, 'b': 2, 3: "c"}  # 定义一个普通字典
dict_3 = dict_2.copy()  # 浅复制一个字典

# 通过dict函数创建字典
dict_4 = dict(a=1, b=2, c=3)
dict_5 = dict(zip(['a', 'b', 'c'], (1, 2, 3)))
dict_6 = dict([('a', 1), ('b', 2), ('c', 3)])

# 通过fromkeys创建并返回新的字典，有两个参数，键和键对应的值
# 值可以不提供，默认None，不过有个输出结果要注意一下！！！
dict_7 = {}.fromkeys(['a', 'b', 'c'], [1, 2, 3])

# 输出字典：
print('dict_1：%s' % dict_1)
print('dict_2：%s' % dict_2)
print('dict_3：%s' % dict_3)
print('dict_4：%s' % dict_4)
dict_5['a'] = 10
print('dict_2：%s' % dict_5)
dict_6['a'] = 11
print('dict_3：%s %s' % (dict_6, type(dict_6)))
print('dict_4：%s' % dict_7)



def _访问字典中的元素_():
    print(" ******** 2.访问字典中的元素 *********")
    # 通过键查询对应的值，如果没有这个键会报错TypeError
    # print(dict_1['b'])

    # 通过get()方法查询键对应的值，没有的话默认返回None，你也可以改成返回其他值
    print(dict_1.get('d'))

    # 和get()类似，如果找不到键的话会自动添加键，并赋值None
    print(dict_1.setdefault('d'))
    print(dict_1)

    # 判断字典中是否有某个键
    print('d' in dict_1)
    print(dict_1.__contains__('d'))

    # 获得字典里所有的键
    print(dict_1.keys())

    # 获得字典里所有的值
    print(dict_1.values())
    # 获得字典里所有的键值对
    print(dict_2.items())


def _修改字典_():
    print(" ******** 3.修改字典 *********")
    dict_1 = {'a': True, 'b': 2, 3: "c"}
    dict_1['b'] = 'HaHa'
    print(dict_1)
    dict_1.update({'b': "123"})

    # 把别的字典里的键值对更新到字典里
    dict_1.update({'d': 'Pig', 'e': '1'})
    print(dict_1)

def _字典遍历_():
    print(" ******** 4.字典遍历 *********")
    dict_1 = {'a': True, 'b': 2, 3: "c"}
    # 方法一
    for d in dict_1:
        print("%s:%s，" % (d, dict_1.get(d)), end='')
    # 方法二
    for (k, v) in dict_1.items():
        print("%s:%s，" % (k, v), end='')

    dict_1.update({'e': 100, 'd': 101})
    for (k, v) in dict_1.items():
        print("%s:%s，" % (k, v), end='\t')


def _有序字典_():
    print(" ******** 5.有序字典 *********")
    dict_order = OrderedDict()
    dict_order['a'] = 10
    dict_order[1] = "a"
    dict_order["c"] = 4.5
    for key in dict_order:
        print(dict_order.get(key), end="\t")


_访问字典中的元素_()
_修改字典_()
_字典遍历_()
_有序字典_()

